package com.example.photoview;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Collections;
/**
 * 完成图片右键菜单里所有6个操作
 */
public class ImageList {
    /**
     *判断文件是否为图片
     * 通过查看文件的后缀来判断是否合法
     */
    public static boolean isSupportImage(String name) {
        String FileType = name.substring(name.lastIndexOf('.') + 1, name.length());
        //System.out.println(FileType);
        if (FileType.equals("jpg") || FileType.equals("jpeg") || FileType.equals("gif") ||
                FileType.equals("bmp") || FileType.equals("png"))
            return true;
        else {
            //System.out.println("2");
            return false;
        }
    }


    /**
     * 初始化图片列表
     * 用FileVisitor来遍历文件夹，每次只遍历当前文件夹的图片是否合法
     * 然后放进ArrayList中，不访问子文件夹
     */
    public static ArrayList<ImageModel> initImageList(String path) throws IOException {
        ArrayList<ImageModel> imageList = new ArrayList<>();
        if (path.equals("") || path == null)
            return null;
        //fileVisitor
        Files.walkFileTree(Paths.get(path), new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
                String fileName = file.getFileName().toString().toLowerCase();
                //System.out.println("alpha"+fileName);
                if (isSupportImage(fileName)) {
                    imageList.add(new ImageModel(file.toString()));

                }
                //else{
                 //   System.out.println(1);
                //}
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
                if (dir.toString().equals(path)) {
                    return FileVisitResult.CONTINUE;
                } else
                    return FileVisitResult.SKIP_SUBTREE;//不访问子目录
            }

        });
        return imageList;


    }
    /**
     * 返回文件夹内图片张数
     */

    public static int getListImgNum(ArrayList<ImageModel> imageModels) {
        return imageModels.size();
    }

    /**
     * 返回文件夹内的 图片 大小
      */

    public static String getListImgSize(ArrayList<ImageModel> imageModels) {
        long total = 0;
        for (ImageModel i : imageModels) {
            total += i.getFileLength();
        }
        return Model.getFormLength(total);
    }
    /**
     * 刷新界面 在只有路径作为字符串时的操作
     * */
    public static ArrayList<ImageModel> refreshList(String path){
        ArrayList<ImageModel> list;
        try{
            list=initImageList(path);
        }catch (IOException e){
           return null;
        }
        return list;
    }
    /**
     * 按排序刷新界面
     * 在有路径 字符串 和分配模式 字符串的模式下完成
     * */
    public static ArrayList<ImageModel> refreshListStr(String path,String mode){
        ArrayList<ImageModel>list=refreshList(path);
        switch(mode){
            case SortParam.SBND:
                assert list != null;
                Collections.reverse(list);//降序排序
                return list;
            case SortParam.SBSR:
                assert list != null;
                list.sort(new SortBySize());
                return list;
            case SortParam.SBSD:
                assert list != null;
                list.sort(new SortBySize());
                Collections.reverse(list);
                return list;
            case SortParam.SBDR:
                assert list != null;
                list.sort(new SortByDate());
                return list;
            case SortParam.SBDD:
                assert list != null;
                list.sort(new SortByDate());
                Collections.reverse(list);
                return list;
        }
        return list;
    }
}